home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / Environment Additions / Symantec / Additions / SOM (SPM) / somcorba.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-27  |  6.6 KB  |  231 lines  |  [TEXT/MPS ]

  1. /************************************************************
  2.  
  3. Created: Friday, March 24, 1995 at 3:57:18 PM
  4.     somcorba.h
  5.     
  6.     Typedefs, structs, & prototypes in support of
  7.     CORBA extensions to the SOM run-time
  8.     Macintosh Version
  9.  
  10.         © International Business Machines Corp. 1992-1994
  11.         © Apple Computer, Inc.                    1994-1995
  12.         All rights reserved
  13.  
  14. ************************************************************/
  15.  
  16.  
  17. #ifndef        __SOMCORBA__
  18. #define        __SOMCORBA__
  19.  
  20. #ifndef        __STRING__
  21. #include    <string.h>  /* needed for memset, used below */
  22. #endif
  23.  
  24. #ifdef CORBA_FUNCTION_NAMES
  25. #define CORBAObject Object
  26. #endif
  27.  
  28. /* in SOM, a CORBA object is a SOM object */
  29. typedef SOMObject CORBAObject;
  30.  
  31. /* CORBA 5.7, p.89 */
  32. typedef unsigned char octet;
  33. typedef char *corbastring;
  34.  
  35. /* CORBA 7.5.1, p. 129 */
  36. typedef corbastring Identifier;
  37.  
  38. /* CORBA 4.13, p. 80 */
  39. enum {NO_EXCEPTION, USER_EXCEPTION, SYSTEM_EXCEPTION};
  40. typedef long exception_type;
  41.  
  42. enum {YES, NO, MAYBE};
  43. typedef long completion_status;
  44.  
  45. typedef struct {
  46.     unsigned long minor;
  47.     completion_status completed;
  48. } StExcep;
  49.  
  50. typedef struct {
  51.     exception_type    _major;
  52.     struct {
  53.         char        *_exception_name;
  54.         void        *_params;
  55.     } exception;
  56.     void            *_somdAnchor;
  57. } Environment;
  58.  
  59. /* CORBA 7.6.1, p.139 plus 5.7, p.89 enum Data Type Mapping */
  60. typedef unsigned long TCKind; 
  61.   #define TypeCode_tk_null        1 
  62.   #define TypeCode_tk_void        2
  63.   #define TypeCode_tk_short        3 
  64.   #define TypeCode_tk_long        4 
  65.   #define TypeCode_tk_ushort    5 
  66.   #define TypeCode_tk_ulong        6
  67.   #define TypeCode_tk_float        7 
  68.   #define TypeCode_tk_double    8 
  69.   #define TypeCode_tk_boolean    9 
  70.   #define TypeCode_tk_char        10
  71.   #define TypeCode_tk_octet        11 
  72.   #define TypeCode_tk_any        12 
  73.   #define TypeCode_tk_TypeCode    13 
  74.   #define TypeCode_tk_Principal    14 
  75.   #define TypeCode_tk_objref    15
  76.   #define TypeCode_tk_struct    16 
  77.   #define TypeCode_tk_union        17 
  78.   #define TypeCode_tk_enum        18 
  79.   #define TypeCode_tk_string    19
  80.   #define TypeCode_tk_sequence    20 
  81.   #define TypeCode_tk_array        21
  82.  
  83.   #define TypeCode_tk_pointer    101 /* SOM extension */
  84.   #define TypeCode_tk_self        102 /* SOM extension */
  85.   #define TypeCode_tk_foreign    103 /* SOM extension */
  86.  
  87. /* Short forms of tk_<x> enumerators */
  88.  
  89.   #define tk_null        TypeCode_tk_null 
  90.   #define tk_void        TypeCode_tk_void
  91.   #define tk_short        TypeCode_tk_short 
  92.   #define tk_long        TypeCode_tk_long 
  93.   #define tk_ushort        TypeCode_tk_ushort 
  94.   #define tk_ulong        TypeCode_tk_ulong
  95.   #define tk_float        TypeCode_tk_float 
  96.   #define tk_double        TypeCode_tk_double 
  97.   #define tk_boolean    TypeCode_tk_boolean 
  98.   #define tk_char        TypeCode_tk_char
  99.   #define tk_octet        TypeCode_tk_octet 
  100.   #define tk_any        TypeCode_tk_any 
  101.   #define tk_TypeCode    TypeCode_tk_TypeCode 
  102.   #define tk_Principal    TypeCode_tk_Principal 
  103.   #define tk_objref        TypeCode_tk_objref
  104.   #define tk_struct        TypeCode_tk_struct 
  105.   #define tk_union        TypeCode_tk_union 
  106.   #define tk_enum        TypeCode_tk_enum 
  107.   #define tk_string        TypeCode_tk_string
  108.   #define tk_sequence    TypeCode_tk_sequence 
  109.   #define tk_array        TypeCode_tk_array
  110.   #define tk_pointer    TypeCode_tk_pointer
  111.   #define tk_self        TypeCode_tk_self
  112.   #define tk_foreign    TypeCode_tk_foreign 
  113.  
  114. #ifndef SOM_TYPECODE
  115.   #define SOM_TYPECODE
  116.   typedef void *TypeCode;
  117. #endif /* SOM_TYPECODE */
  118.  
  119. /* CORBA 5.7, p.89 */
  120. typedef struct {
  121.     TypeCode    _type;
  122.     void        *_value;
  123. } any;
  124.  
  125. /* Convenience macros for sequences */
  126. #define sequence(type) _IDL_SEQUENCE_ ## type
  127. #define SOM_SEQUENCE_NAME(name,type)\
  128.     struct name {\
  129.     unsigned long _maximum;\
  130.     unsigned long _length;\
  131.     type     *    _buffer;\
  132.     }
  133. #define SOM_SEQUENCE(type)\
  134.     struct {\
  135.     unsigned long _maximum;\
  136.     unsigned long _length;\
  137.     type     *    _buffer;\
  138.     }
  139.  
  140. #define SOM_SEQUENCE_TYPEDEF(type) typedef SOM_SEQUENCE(type) sequence(type)
  141. #define SOM_SEQUENCE_TYPEDEF_NAME(type, name) typedef SOM_SEQUENCE(type) name
  142.  
  143. /* per CORBA 5.10, p.91 */
  144. #ifndef _IDL_SEQUENCE_void_defined
  145. #define _IDL_SEQUENCE_void_defined
  146. SOM_SEQUENCE_TYPEDEF (void);
  147. #endif /* _IDL_SEQUENCE_void_defined */
  148.  
  149. /* SOM extensions for sequence manipulation */
  150. #define GENERIC_SEQUENCE    sequence(void)
  151.  
  152. /* 
  153.     Normally the sequenceNew macro assumes that a TypeCode constant
  154.     of the form TC_xxx exists for any type xxx used as an argument
  155.     and invokes the kernel function tcSequenceNew to allocate
  156.     
  157. #define sequenceNew(type,max)    (*(sequence(type) *)tcSequenceNew(TC_##type,max))
  158.  
  159.     Currently, SOM's Type Code facility, Interface Repository
  160.     and distribution facility (DSOM) are not supported on the 
  161.     Macintosh platform, so sequenceNew is not defined.
  162. */
  163.  
  164. #define sequenceElement(s,elem) (s._buffer[elem])
  165. #define sequenceLength(s)    (s._length)
  166. #define sequenceMaximum(s)    (s._maximum)
  167.  
  168. SOMEXTERN char * SOMLINK somExceptionId    (Environment *ev);
  169. SOMEXTERN void * SOMLINK somExceptionValue (Environment *ev);
  170. SOMEXTERN void     SOMLINK somExceptionFree  (Environment *ev);
  171. SOMEXTERN void     SOMLINK somSetException   (Environment *ev,
  172.     exception_type major, char *exception_name, void *params);
  173. SOMEXTERN Environment * SOMLINK somGetGlobalEnvironment (void);
  174.  
  175. /* Exception function names per CORBA 5.19, p.99 */
  176. #define exception_id    somExceptionId
  177. #define exception_value somExceptionValue
  178. #define exception_free    somExceptionFree
  179.  
  180. #ifndef    TRUE
  181. #define    TRUE 1
  182. #endif    /* TRUE */
  183. #ifndef    FALSE
  184. #define    FALSE 0
  185. #endif    /* FALSE */
  186.  
  187. #if OLDIBMSOMAPISUPPORT
  188. /* can no longer treat shared objects as globals without
  189.     keeping track of reference counts.  get a reference to the
  190.     class manager object and access its interface repository
  191.     instead
  192. */
  193. #define SOM_InterfaceRepository\
  194.     (__get_somInterfaceRepository(SOMClassMgrObject))
  195. #endif
  196.  
  197. /*  Convenience macros for manipulating environment structures
  198.  *
  199.  *  SOM_CreateLocalEnvironment returns a pointer to an Environment.
  200.  *  The other 3 macros all expect a single argument that is also
  201.  *  a pointer to an Environment.  Use the create/destroy forms for
  202.  *  a dynamic local environment and the init/uninit forms for a stack-based
  203.  *  local environment.
  204.  *
  205.  *  For example 
  206.  *
  207.  *      Environment *ev;
  208.  *      ev = SOM_CreateLocalEnvironment ();
  209.  *      ... Use ev in methods 
  210.  *      SOM_DestroyLocalEnvironment (ev);
  211.  *
  212.  *  or
  213.  *
  214.  *      Environment ev;
  215.  *      SOM_InitEnvironment (&ev);
  216.  *      ... Use &ev in methods
  217.  *      SOM_UninitEnvironment (&ev);
  218.  */
  219. #define SOM_CreateLocalEnvironment()\
  220.     ((Environment *) SOMCalloc (1, sizeof (Environment)))
  221. #define SOM_DestroyLocalEnvironment(ev)\
  222.     (somExceptionFree ((ev)), (somGetGlobalEnvironment() == (ev)) ?\
  223.     (void) 0 : SOMFree ((ev))) 
  224. #define SOM_InitEnvironment(ev)\
  225.     ((somGetGlobalEnvironment() == (ev)) ?\
  226.     (void *) NULL : memset (((char *)((ev))), 0, sizeof (Environment)))
  227. #define SOM_UninitEnvironment(ev)\
  228.     (somExceptionFree ((ev)))
  229.  
  230. #endif    /* __SOMCORBA__ */
  231.